#include <iostream>
#include <vector> 
#include <unistd.h> 
#include <sys/wait.h>
#include <stdlib.h>

using namespace std;

typedef void (*head_fun)();  // 函数指针
vector<head_fun> v;

void test1()
{
  cout << "执行步骤1\n";
}

void test2()
{
  cout << "执行步骤2\n";
}

void fun()
{
  v.push_back(test1);
  v.push_back(test2);
}

int main()
{
  pid_t id = fork();  // 创建子进程
  if (id == 0)
  {
    // 子进程
    int s = 5;
    while(s)
    {
      cout << "当前子进程pid:" << getpid() << " 等待子进程剩余时间：" << s-- << endl;
      sleep(1);
    }
    exit(114);
  }
  else if (id < 0)
  {
    cout << "创建失败" <<endl;
    exit(-1);
  }
  else 
  {
    int status = 0;  // 获取关于子进程的相关退出信息
    fun();
    while(true)
    {
      pid_t flag = waitpid(-1, &status, WNOHANG);  //无阻塞的对任意子进程查看是否结束，等待失败返回-1，等待成功返回pid，否则0
      if (flag > 0)
      {
        cout << "等待子进程成功，子进程pid为:" << flag << " 退出码为:" << WEXITSTATUS(status) << endl;
        break;
      }
      else if (flag == 0)
      {
        cout << "子进程未结束，执行其他的" << endl;
        sleep(1);
        v.front()();
        v.back()();
      }
      else 
      {
        cout << "等待出错" << endl;
        break;
      }
    }
    
  }
  return 0;
}
